package com.hengpeng.itfin.domain.partner;

import com.hengpeng.itfinbase.message.ResponseMessage;
import com.hengpeng.itfinbase.message.partner.AddBidInfoRequest;
import com.hengpeng.itfinbase.message.partner.AddBidInfoResponse;
import com.hengpeng.itfinbase.message.partner.BindCardRequest;
import com.hengpeng.itfinbase.message.partner.CashRequestMsg;
import com.hengpeng.itfinbase.message.partner.CorpOpenRequestMsg;
import com.hengpeng.itfinbase.message.partner.CorpRegisterQueryRequest;
import com.hengpeng.itfinbase.message.partner.CreditAssignRequest;
import com.hengpeng.itfinbase.message.partner.CreditAssignResponse;
import com.hengpeng.itfinbase.message.partner.DrawReconciliationRequestMsg;
import com.hengpeng.itfinbase.message.partner.DrawReconciliationResponseMsg;
import com.hengpeng.itfinbase.message.partner.InvestInfoRequestMsg;
import com.hengpeng.itfinbase.message.partner.InvestInfoResponseMsg;
import com.hengpeng.itfinbase.message.partner.LoansRequest;
import com.hengpeng.itfinbase.message.partner.LoansResponse;
import com.hengpeng.itfinbase.message.partner.ModifyRequest;
import com.hengpeng.itfinbase.message.partner.NotifyRequestMsg;
import com.hengpeng.itfinbase.message.partner.NotifyResponseMsg;
import com.hengpeng.itfinbase.message.partner.OpenRequestMsg;
import com.hengpeng.itfinbase.message.partner.PayRequestMsg;
import com.hengpeng.itfinbase.message.partner.QueryAcctsRequestMsg;
import com.hengpeng.itfinbase.message.partner.QueryAcctsResponseMsg;
import com.hengpeng.itfinbase.message.partner.QueryBalanceRequest;
import com.hengpeng.itfinbase.message.partner.QueryCardInfoRequestMsg;
import com.hengpeng.itfinbase.message.partner.QueryCardInfoResponseMsg;
import com.hengpeng.itfinbase.message.partner.QueryTransDetailRequest;
import com.hengpeng.itfinbase.message.partner.QueryTransDetailResponse;
import com.hengpeng.itfinbase.message.partner.QueryTransStatRequest;
import com.hengpeng.itfinbase.message.partner.QueryTransStatResponse;
import com.hengpeng.itfinbase.message.partner.ReconciliationRequestMsg;
import com.hengpeng.itfinbase.message.partner.ReconciliationResponseMsg;
import com.hengpeng.itfinbase.message.partner.RepaymentRequestMsg;
import com.hengpeng.itfinbase.message.partner.SaveReconciliationRequestMsg;
import com.hengpeng.itfinbase.message.partner.SaveReconciliationResponseMsg;
import com.hengpeng.itfinbase.message.partner.TenderCancleRequest;
import com.hengpeng.itfinbase.message.partner.TenderCancleResponse;
import com.hengpeng.itfinbase.message.partner.TransferRequest;
import com.hengpeng.itfinbase.message.partner.TransferResponse;
import com.hengpeng.itfinbase.message.partner.TrfReconciliationRequestMsg;
import com.hengpeng.itfinbase.message.partner.TrfReconciliationResponseMsg;
import com.hengpeng.itfinbase.message.partner.UsrUnFreezeRequest;
import com.hengpeng.itfinbase.message.partner.UsrUnFreezeResponse;

/**
 * <pre>
 * 合作商处理器接口
 * </pre>
 * 
 * @author zhaojitao
 * @version 1.0, 2015-5-27
 */
public interface PartnerProcessor {
    /**
     * 开户
     */
    ResponseMessage packageOpenRequest(OpenRequestMsg request);

    /**
     * 开户通知
     */
    NotifyResponseMsg openNotify(NotifyRequestMsg request);

    /**
     * <pre>
     * 企业用户开户
     * </pre>
     * 
     * @param request
     */
    ResponseMessage packageCorpOpenRequest(CorpOpenRequestMsg request);

    /**
     * <pre>
     * 企业用户开户状态通知
     * </pre>
     * 
     * @param request
     */
    NotifyResponseMsg corpOpenNotify(NotifyRequestMsg request);

    /**
     * <pre>
     * 企业用户开户状态查询
     * </pre>
     * 
     * @param request
     */
    ResponseMessage queryCorpOpenRequest(CorpRegisterQueryRequest request);

    /**
     * 邦卡结果通知
     * 
     * @param request
     * @return
     */
    NotifyResponseMsg bindCardNotify(NotifyRequestMsg request);

    /**
     * 正常批次还款
     */
    ResponseMessage batchRepaymentRequest(RepaymentRequestMsg request);

    /**
     * 正常批次还款通知
     */
    NotifyResponseMsg batchRepaymentNotify(NotifyRequestMsg request);

    /**
     * 还款
     */
    ResponseMessage repaymentRequest(RepaymentRequestMsg request);

    /**
     * 还款通知
     */
    NotifyResponseMsg repaymentNotify(NotifyRequestMsg request);

    /**
     * <pre>
     * 余额查询(后台方式)
     * </pre>
     * 
     * @param request
     * @return
     */
    ResponseMessage queryBalanceBgRequest(QueryBalanceRequest request);

    /**
     * <pre>
     * 平台账户查询
     * </pre>
     * 
     * @param request
     * @return
     */
    QueryAcctsResponseMsg queryAcctsRequest(QueryAcctsRequestMsg request);

    /**
     * <pre>
     * 主动投标
     * </pre>
     * 
     * @param request
     * @return
     */
    InvestInfoResponseMsg packageInitiativeTenderRequest(InvestInfoRequestMsg request);

    /**
     * 投资通知
     */
    NotifyResponseMsg initiativeTenderNotify(NotifyRequestMsg request);

    /**
     * 转账
     */
    TransferResponse packageTransferRequest(TransferRequest request);

    /**
     * 转账通知
     */
    NotifyResponseMsg transferNotify(NotifyRequestMsg request);

    /**
     * 充值
     */
    ResponseMessage packagePayRequest(PayRequestMsg request);

    /**
     * 充值通知
     */
    NotifyResponseMsg payNotify(NotifyRequestMsg request);

    /**
     * 资料修改
     */
    ResponseMessage packageModifyRequest(ModifyRequest request);

    /**
     * 用户绑定银行卡
     * 
     * @param request
     * @return
     */
    ResponseMessage packageBindCardRequest(BindCardRequest request);

    /**
     * 提现请求
     */
    ResponseMessage packageDrawRequest(CashRequestMsg request);

    /**
     * 提现
     */
    NotifyResponseMsg drawNotify(NotifyRequestMsg request);

    /**
     * <pre>
     * 标的信息录入
     * </pre>
     * 
     * @param request
     * @return
     */
    public AddBidInfoResponse addBidInfo(AddBidInfoRequest request);

    /**
     * <pre>
     * 标的放款
     * </pre>
     * 
     * @param request
     * @return
     */
    public LoansResponse loans(LoansRequest request);

    /**
     * <pre>
     * 标的放款返回通知
     * </pre>
     * 
     * @param request
     * @return
     */
    public NotifyResponseMsg loansNotify(NotifyRequestMsg request);

    /**
     * <pre>
     * 标的撤销
     * </pre>
     * 
     * @param request
     * @return
     */
    public TenderCancleResponse tenderCancle(TenderCancleRequest request);

    /**
     * <pre>
     * 交易查询
     * </pre>
     * 
     * @param request
     * @return
     */
    public QueryTransStatResponse queryTransStat(QueryTransStatRequest request);

    /**
     * 交易明细查询
     * 
     * @param request
     * @return
     */
    public QueryTransDetailResponse queryTransDetail(QueryTransDetailRequest request);

    /**
     * <pre>
     * 银行卡查询接口
     * </pre>
     * 
     * @param request
     * @return
     */
    public QueryCardInfoResponseMsg queryCardInfo(QueryCardInfoRequestMsg request);

    /**
     * <pre>
     * 放款还款对账
     * </pre>
     * 
     * @param request
     * @return
     */
    public ReconciliationResponseMsg reconciliation(ReconciliationRequestMsg request);

    /**
     * <pre>
     * 商户扣款对账
     * </pre>
     * 
     * @param request
     * @return
     */
    public TrfReconciliationResponseMsg trfReconciliation(TrfReconciliationRequestMsg request);

    /**
     * <pre>
     * 充值对账
     * </pre>
     * 
     * @param request
     * @return
     */
    public SaveReconciliationResponseMsg saveReconciliation(SaveReconciliationRequestMsg request);

    /**
     * <pre>
     * 取现对账
     * </pre>
     * 
     * @param request
     * @return
     */
    public DrawReconciliationResponseMsg drawReconciliation(DrawReconciliationRequestMsg request);

    /**
     * <pre>
     * 债权转让
     * </pre>
     * 
     * @param reqeust
     * @return
     */
    public CreditAssignResponse packageCreditAssign(CreditAssignRequest reqeust);

    /**
     * <pre>
     * 流标资金解冻接口
     * </pre>
     * 
     * @param request
     * @return
     */
    public UsrUnFreezeResponse usrUnFreeze(UsrUnFreezeRequest request);

    /**
     * <pre>
     * 标的撤销返回通知
     * </pre>
     * 
     * @param request
     * @return
     */
    public NotifyResponseMsg usrUnFreezeNotify(NotifyRequestMsg request);

    /**
     * <pre>
     * 债权转让响应
     * </pre>
     * 
     * @param request
     * @return
     */
    public NotifyResponseMsg creditAssignNotify(NotifyRequestMsg request);
}
